import hashlib
import os
import pickle
from typing import Optional


def generate_md5_hash(s: str) -> str:
    hash_object = hashlib.md5()
    hash_object.update(s.encode())
    return hash_object.hexdigest()

def 用MD5作为键添加到dict(add_dict: dict, key: str, value: str):
    """如果是同一个key，那么它的md5值是一样的，后边添加的不会改变顺序"""
    md5_hash = generate_md5_hash(key)
    add_dict[md5_hash] = value


# 定义一个文件名用于存储序列化数据
data_file = 'keyword_and_time.pkl'

# 定义一个函数用于保存查询数据和次数
def save_data(keyword, count):
    # 使用 'with' 语句确保文件正确关闭
    with open(data_file, 'wb') as f:  # 'wb' 表示二进制写入模式
        pickle.dump((keyword, count), f)


# 定义一个函数用于加载查询数据和次数
def load_data() -> tuple:
    if os.path.exists(data_file):
        with open(data_file, 'rb') as f:  # 'rb' 表示二进制读取模式
            return pickle.load(f)
    else:
        return None, 0


# 定义一个函数用于处理查询
def update_data(keyword: Optional[str], count: int):

    # 判断是否为新的关键词或者需要清空计数
    if not keyword or count >= 3:
        # 清空数据
        save_data(None, 0)
    else:
        # 增加查询次数
        count += 1
        # 保存新的查询数据和次数
        save_data(keyword, count)


if __name__ == '__main__':
    # my_dict = {}
    #
    # # 定义字符串
    # str1 = "Hello"
    # str2 = "World"
    #
    # # 使用MD5格式化字符串，并将其放入dict
    # md5_hash = generate_md5_hash(str1)
    # md5_hash2 = generate_md5_hash(str2)
    # my_dict[md5_hash] = str1
    # my_dict[md5_hash2] = str2
    #
    # # 打印dict，它会保持插入顺序
    # print(my_dict)
    # md5_hash = generate_md5_hash(str1)
    # my_dict[md5_hash] = str1
    # # 更新不会改变顺序
    # print(my_dict)

    # 获取关键字
    keyword, count = load_data()
    print(f"关键字: {keyword}, 次数: {count}")
    update_data("策划吃1", 0)
    print(load_data())
    update_data("策划吃1", 1)
    print(load_data())
    update_data("策划吃1", 2)
    print(load_data())
    update_data("策划吃1", 3)
    print(load_data())
